home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 1 / Precision Software Applications Silver Collection Volume One (PSM) (1993).iso / tutor / asm1tut.exe / ADD1.ASM < prev    next >
Assembly Source File  |  1990-06-20  |  6KB  |  191 lines

  1. ; add1.asm - adds signed and unsigned words and bytes
  2.  
  3. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  4. STACKSEG    SEGMENT   STACK  'STACK'
  5.  
  6.              dw     100h  dup (?)
  7.  
  8. STACKSEG    ENDS
  9. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  10. DATASTUFF    SEGMENT   PUBLIC  'DATA'
  11.  
  12.        ; 1 = signed, 2 = unsigned, 3 = binary
  13.        ; 4 = hex, 5 = ascii 
  14.        ; 90h = signed, A0h = unsigned, B0h = binary
  15.        ; C0h = hex, D0h = ascii 
  16.  
  17. ax_byte      db  2
  18. bx_byte      db  2
  19. cx_byte      db  2
  20. dx_byte      db  2
  21. si_byte      db  2
  22. di_byte      db  2
  23. bp_byte      db  2
  24. sp_byte      db  2
  25.  
  26. ; + + + + + + + + + + + + + + + START DATA BELOW THIS LINE
  27.  
  28. ; + + + + + + + + + + + + + + + END DATA ABOVE THIS LINE
  29.  
  30. DATASTUFF    ENDS
  31. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  32. CODESTUFF    SEGMENT   PUBLIC  'CODE'
  33.  
  34.        ; **************  ASMHELP.OBJ  INFO
  35.  
  36.        EXTRN  show_regs:NEAR , show_regs_and_wait:NEAR
  37.        EXTRN  set_reg_style:NEAR , set_count:NEAR
  38.        EXTRN  set_blue:NEAR , get_continue:NEAR
  39.        
  40.        EXTRN  get_num:NEAR ,            print_num:NEAR 
  41.        EXTRN  get_string:NEAR ,         print_string:NEAR
  42.        EXTRN  get_ascii_byte:NEAR  ,    print_ascii_byte:NEAR
  43.        EXTRN  get_ascii:NEAR  ,         print_ascii:NEAR
  44.        EXTRN  get_hex_byte:NEAR ,       print_hex_byte:NEAR
  45.        EXTRN  get_hex:NEAR ,            print_hex:NEAR 
  46.        EXTRN  get_binary_byte:NEAR ,    print_binary_byte:NEAR
  47.        EXTRN  get_binary:NEAR ,         print_binary:NEAR
  48.        EXTRN  get_bcd:NEAR   ,          print_bcd:NEAR
  49.        
  50.        EXTRN  get_signed_byte:NEAR ,    print_signed_byte:NEAR
  51.        EXTRN  get_unsigned_byte:NEAR ,  print_unsigned_byte:NEAR
  52.        EXTRN  get_signed:NEAR ,         print_signed:NEAR
  53.        EXTRN  get_unsigned:NEAR ,       print_unsigned:NEAR 
  54.        EXTRN  get_signed_4byte:NEAR ,   print_signed_4byte:NEAR
  55.        EXTRN  get_unsigned_4byte:NEAR , print_unsigned_4byte:NEAR
  56.        EXTRN  get_signed_8byte:NEAR ,   print_signed_8byte:NEAR
  57.        EXTRN  get_unsigned_8byte:NEAR , print_unsigned_8byte:NEAR
  58.  
  59.        ; **************  END ASMHELP.OBJ  INFO
  60.           
  61.        ASSUME cs:CODESTUFF, ds:DATASTUFF
  62.  
  63. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  64.  
  65. main   proc far
  66.  
  67. start: push  ds               ; set up for return
  68.        sub   ax,ax
  69.        push  ax
  70.  
  71.        mov   ax, DATASTUFF    ; load ds
  72.        mov   ds,ax
  73.  
  74. ; + + + + + + + + + + + + + + + START CODE BELOW THIS LINE
  75.  
  76.        mov   si, 0               ; clear unused registers
  77.        mov   di, 0
  78.        mov   bp, 0
  79.        call  show_regs
  80.  
  81. outer_loop:
  82.  
  83.        ; UNSIGNED WORD ADDITION
  84.        mov   ax_byte, 2          ; ax, bx, dx unsigned
  85.        mov   bx_byte, 2
  86.        mov   dx_byte, 2
  87.        lea   ax, ax_byte         ; call set_reg_style
  88.        call  set_reg_style
  89.  
  90.        mov   cx, 3               ; 3 iterations
  91. unsigned_loop:
  92.        mov   ax, 0               ; clear the registers for visibility
  93.        mov   bx, 0
  94.        mov   dx, 0
  95.        call  show_regs
  96.        call  get_unsigned        ; first number to  ax
  97.        call  show_regs
  98.        push  ax                  ; temporarily save ax
  99.        call  get_unsigned        ; second number to bx
  100.        mov   bx, ax
  101.        pop   ax                  ; get ax back
  102.        mov   dx, ax              ; copy of ax to dx
  103.        add   dx, bx              ; dx (=ax) + bx
  104.        call  show_regs_and_wait
  105.        loop  unsigned_loop
  106.  
  107.        ; UNSIGNED BYTE ADDITION
  108.        mov   ax_byte, 0A2h       ; ax, bx, dx unsigned half regs
  109.        mov   bx_byte, 0A2h
  110.        mov   dx_byte, 0A2h
  111.        lea   ax, ax_byte         ; call set_reg_style
  112.        call  set_reg_style
  113.  
  114.        mov   cx, 3               ; 3 iterations
  115. unsigned_byte_loop:
  116.        mov   ax, 0               ; clear the registers for visibility
  117.        mov   bx, 0
  118.        mov   dx, 0
  119.        call  show_regs
  120.        call  get_unsigned_byte   ; first number to  al
  121.        call  show_regs
  122.        push  ax                  ; temporarily save ax
  123.        call  get_unsigned_byte   ; second number to bl
  124.        mov   bl, al
  125.        pop   ax                  ; get ax back
  126.        mov   dl, al              ; copy of al to dl
  127.        add   dl, bl              ; dl (=al) + bl
  128.        call  show_regs_and_wait
  129.        loop  unsigned_byte_loop
  130.  
  131.        ; SIGNED WORD ADDITION
  132.        mov   ax_byte, 1          ; ax, bx, dx signed
  133.        mov   bx_byte, 1
  134.        mov   dx_byte, 1
  135.        lea   ax, ax_byte         ; call set_reg_style
  136.        call  set_reg_style
  137.  
  138.        mov   cx, 3               ; 3 iterations
  139. signed_loop:
  140.        mov   ax, 0               ; clear the registers for visibility
  141.        mov   bx, 0
  142.        mov   dx, 0
  143.        call  show_regs
  144.        call  get_signed          ; first number to  ax
  145.        call  show_regs
  146.        push  ax                  ; temporarily save ax
  147.        call  get_signed          ; second number to bx
  148.        mov   bx, ax
  149.        pop   ax                  ; get ax back
  150.        mov   dx, ax              ; copy of ax to dx
  151.        add   dx, bx              ; dx (=ax) + bx
  152.        call  show_regs_and_wait
  153.        loop  signed_loop
  154.  
  155.        ; SIGNED BYTE ADDITION
  156.        mov   ax_byte, 91h        ; ax, bx, dx signed half regs
  157.        mov   bx_byte, 91h
  158.        mov   dx_byte, 91h
  159.        lea   ax, ax_byte         ; call set_reg_style
  160.        call  set_reg_style
  161.  
  162.        mov   cx, 3               ; 3 iterations
  163. signed_byte_loop:
  164.        mov   ax, 0               ; clear the registers for visibility
  165.        mov   bx, 0
  166.        mov   dx, 0
  167.        call  show_regs
  168.        call  get_signed_byte     ; first number to  al
  169.        call  show_regs
  170.        push  ax                  ; temporarily save ax
  171.        call  get_signed_byte     ; second number to bl
  172.        mov   bl, al
  173.        pop   ax                  ; get ax back
  174.        mov   dl, al              ; copy of al to dl
  175.        add   dl, bl              ; dl (=al) + bl
  176.        call  show_regs_and_wait
  177.        loop  signed_byte_loop
  178.  
  179.        jmp   outer_loop
  180. ; + + + + + + + + + + + + + + + END CODE ABOVE THIS LINE
  181.  
  182.        ret
  183.  
  184. main   endp
  185. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  186.  
  187. CODESTUFF    ENDS
  188. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  189.        END     start
  190.  
  191.